//package com.awenhui.demo.controller;
//
//import com.alibaba.fastjson.JSON;
//import com.awenhui.demo.core.utils.HttpClientUtil;
//import com.awenhui.demo.core.utils.icbc.IcbcHashMap;
//import com.awenhui.demo.core.utils.icbc.IcbcSign;
//import com.awenhui.demo.core.utils.LogUtils;
//import com.icbc.api.DefaultIcbcClient;
//import com.icbc.api.IcbcApiException;
//import com.icbc.api.IcbcConstants;
//import com.icbc.api.UiIcbcClient;
//import com.icbc.api.request.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1;
//import com.icbc.api.request.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1;
//import com.icbc.api.request.CardbusinessEpaypcConsumptionRequestV1;
//import com.icbc.api.response.CardbusinessAggregatepayB2cOnlineOrderqryResponseV1;
//import com.icbc.api.utils.IcbcSignature;
//import com.icbc.api.utils.WebUtils;
//import io.swagger.annotations.Api;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.text.DateFormat;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//
///**
// * 工行支付
// *
// * @author yuxf
// * @version 1.0
// * @date 2020/7/27 10:36
// */
//@Api(value = "value描述")
//@RestController
//@RequestMapping("/pay")
//public class IcbcPayController {
//
//    public static String LOG_ROOT = "D:\\ktwl\\赛岭公寓\\赛领公寓\\icbc\\pay\\order.txt";
//    //私钥
//    final String MY_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5nzYVQtTxH1hgDETVwVafArBbghdwxBO7O6wUJ9UAv1uAo7giDIFpHZfVKynf+zOqNj1h/OC6drqN/GH5mmBtks8X/kyyAbpG8xWE8LtNRXs+AloYugvtAprAmDiDZ2BrwYyrPQU76127i0C6jHuTVuAykfjByT7dW4d59x1geFPYVM+F/P1XS60mC5nFTdO8GnGUUx280jUGT/Wug4arHpI8+qU+D0BeTywXfWiLHdeyHNfU5pmnkhexLlP2o10EIZIkA9FDDUJnRH4Zt1MA+cHHDj/MkiJUIniEIR3OK4qfqtnTANYGig+f4zPcFMHQ7958igfuIeCCLm/ZNwiTAgMBAAECggEAQSVwnMuk4q9mm+cSbZb6aLpP3P3ubiRS7H6H6VcFecqvOZm8MS8EaDj7pdQNUU/flRiOOIrA8JBk7xop5KlauHoy9q/IiRz0HJyJ6+t1QSxmkZ/PsSfysY8dcwS5qNyqSYdXcG3tHVeAwSahZBeT82UlMHpsvM59osDR7mtdQxK9iqntN+AGzAJ0jL7CVuY0WwlkBwCPLUOZ8r9LE/wZq+4jSoPgyOvZaWta6vmVg2GRl+1n/7OVxRbinbNbPSHKs2satp1+XoqV+S8KE10Aw2AcX6zhSwoO7CBIcw/OoB/Xhx005HV/Elm+66WuKlMi09+mT+yXcYzlhqEBeJ+iiQKBgQD66w5L90H5JQkKqqa4+HyLjObOa0ZOlnlgH7kHH4y40btJaXu9bOkiMqeQrrZmOSKDsMrJcXgCKrSwqQo42zzg1/ABH+UOXZ+NS/HxcKb/cWleqIG13gOYrG1WwqbiZCRxo2IpxpZmnzdQyEGJAoe5rEF+HJJM6zuF3RBvdG2GfQKBgQC9YZySbeqtsaahjlVzeW/eq3WU4ytv0t/1QGquXnJW2O8B5hpmE89sRwxReCdEPkq9mcGfp8NuHDdYzRuriPO8s6W0vxFRBnlPbRJh5Qf0jSObGB/J1G5OSTCRV0AXu3i0cvoIQdAczH8bP/qv0yixkDPKA5Q8XK5s297h6bMoTwKBgDSTM/eu41/05qQZhb2UM2R6LZJq39xvoxcFDpvzfGTtbTTAqXDTdTX5LysdsJJSvmyhipwS7nZlxF6PzNiE94iVNnDF4hTUgS32D8frNtKnTNDMtgEJd+9xkadwOc+N9CTrexINzk3KZqjCjRjMMuwwr7hg/Dapw1sVKvBvkNNxAoGAIYybSi2Ct4aTOGeYp75JnS7Ow7OCzGqVFkN1IrLEmrIPlUyIPLEhu9LSUdRxUFugrfoBHSGBM454F5kuX7MBStqgbmay0KHO980gxormX+Jo/l7FsuGZMPEyU20bg5jIh18fADt4fMGVeuRYqrFDskETi6QarJ7Wn55L28Wk4W0CgYB7EZKWR9RE/8kQSbwbyED7ljfvIx/6d8mSJQ1ub9HflcXt86vk2wjAuZzKl2ZZuh4x9WjNw6QG4zXSdpD5xc/G1mdrXNTZ6aHfkbmr/GKX1jEB76JNjqNDMZXVkZkgAbHCaBGJzE9KeHb0lM6uziifWOBrOaVVZxAr5Ka3s0RTCg==";
//
//    //appid
//    final String APP_ID = "10000000000003160185";
//    final String APIGW_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMpjaWjngB4E3ATh+G1DVAmQnIpiPEFAEDqRfNGAVvvH35yDetqewKi0l7OEceTMN1C6NPym3zStvSoQayjYV+eIcZERkx31KhtFu9clZKgRTyPjdKMIth/wBtPKjL/5+PYalLdomM4ONthrPgnkN4x4R0+D4EBpXo8gNiAFsNwIDAQAB";
//    final String MER_ID = "240207011184";
//    final String MER_PRTCL_NO = "2402070111840201";
//    final String MER_ACCT = "2402003429000043055";
//    final String TIMESTAMP = "2020-07-27 15:18:12";
//
//    /**
//     * 返回结果："{\"response_biz_content\":{\"ecoupon_amt\":\"0\",\"mer_id\":\"240207011184\",\"card_flag\":\"\",\"open_id\":\"ow8NuxGOSI43OB_rAqIgsgEhD4vI\",\"return_msg\":\"SUCCESS\",\"total_disc_amt\":\"0\",\"pay_time\":\"20200727171723\",\"total_amt\":\"1\",\"pay_status\":\"0\",\"out_trade_no\":\"TS1595841398735\",\"card_no\":\"\",\"bank_disc_amt\":\"0\",\"coupon_amt\":\"0\",\"decr_flag\":\"\",\"pay_type\":\"9\",\"mer_disc_amt\":\"0\",\"payment_amt\":\"1\",\"attach\":\"mer_var:data\",\"point_amt\":\"0\",\"return_code\":\"0\",\"order_id\":\"240207011184000732007270003001\",\"third_trade_no\":\"4200000596202007271669926373\"},\"sign\":\"aItPPGJZYgKcsISO37fyAvu3fW82b77DqFPBHkrCIkRK00hFfcJMveJtztVJAdALGFzce296WOeXjfbMQ+RpFFk88ka2DF7GgfK34ZDjToV2hnZqRAeykVpPd7WjgiZie1y86va7kYvJbFFPorWwQ3AkudfLUKsn8QrfkPjfx2Q=\"}"
//     *
//     * @param tradeNo
//     */
//    @GetMapping("payQuery/{tradeNo}")
//    public void payQuery(@PathVariable("tradeNo") String tradeNo) {
//        //签名类型为RSA时，需传入appid，私钥和网关公钥，签名类型使用定值IcbcConstants.SIGN_TYPE_RSA，其他参数 使用缺省值
//        DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY);
//        CardbusinessAggregatepayB2cOnlineOrderqryRequestV1 request = new CardbusinessAggregatepayB2cOnlineOrderqryRequestV1();
//        //根据测试环境和生产环境替换相应ip和端口
//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/orderqry/V1");
//        CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz();
//        request.setBizContent(bizContent);
//
//        //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
//        bizContent.setMer_id(MER_ID);
//        bizContent.setOut_trade_no(tradeNo);
//        // bizContent.setOrder_id("020001030558000611912230005002");
//        bizContent.setDeal_flag("0");
//        bizContent.setIcbc_appid(APP_ID);
//        CardbusinessAggregatepayB2cOnlineOrderqryResponseV1 response;
//        try {
//            response = client.execute(request, System.currentTimeMillis() + "");
//            //msgId消息通讯唯一 编号，要求每次调用独立生成，APP级唯一
//            if (response.getReturnCode() == 0) {
//                // 6、业务成功处理，请根据接口文档用response.getxxx()获取同步返回的业务数据8 请求示例 9 响应示例 // 6、业务成功处理，请根据接口文档用response.getxxx()获取同步返回的业务数据
//                System.out.println("ReturnCode:" + response.getReturnCode());
//                System.out.println("response:" + JSON.toJSONString(response));
//            } else {
//                // 失败
//                System.out.println("response:" + JSON.toJSONString(response));
//                System.out.println("ReturnCode:" + response.getReturnCode());
//                System.out.println("ReturnMsg:" + response.getReturnMsg());
//            }
//        } catch (IcbcApiException e) {
//            e.printStackTrace();
//        }
//    }
//
//    final static String OUT_TRADE_NO = "TS1595821552101";
//    static String ORDER_DATE = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
//
//    /**
//     * 工行sdk支付
//     *
//     * @param response
//     */
//    @GetMapping("testPay")
//    public void testPay(HttpServletResponse response) {
//
//        String outTradeNo = "TS" + System.currentTimeMillis();
//        double amount = 0.01;
//        int fen = (int) (amount * 100);
//
//
//        UiIcbcClient client = new UiIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY,
//                IcbcConstants.CHARSET_UTF8);
//        CardbusinessEpaypcConsumptionRequestV1 request = new CardbusinessEpaypcConsumptionRequestV1();
//        // 5、根据测试环境和生产环境替换相应ip和端口
//        request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/epaypc/consumption/V1");
//        CardbusinessEpaypcConsumptionRequestV1.CardbusinessEpaypcConsumptionRequestV1Biz bizContent = new CardbusinessEpaypcConsumptionRequestV1.CardbusinessEpaypcConsumptionRequestV1Biz();
//        request.setBizContent(bizContent);
//        // 6、请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
//        bizContent.setIcbc_flag("1");
//        bizContent.setIcbc_appid(APP_ID);
//        bizContent.setOrder_date(ORDER_DATE);//==订单时间
//        bizContent.setOut_trade_no(OUT_TRADE_NO);//==订单号
//        bizContent.setAmount(fen + "");
//        bizContent.setInstallment_times("1");
//        bizContent.setCur_type("001");
//        bizContent.setMer_id(MER_ID);
//        bizContent.setMer_prtcl_no(MER_PRTCL_NO);
//        bizContent.setMer_acct(MER_ACCT);
//        bizContent.setMerchant_info("RENT");
//        bizContent.setLanguage("zh_CN");
//        //   bizContent.setGoods_id("G001");
//        bizContent.setGoods_name("账单缴费");
//        // bizContent.setGoods_num("xxx");
//        //   bizContent.setCarriage_amt("xxx");
//        bizContent.setMer_hint("账单缴费");//商城提示
//        bizContent.setExpire_time(LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
//        //   bizContent.setMer_reference("xxx");
//        bizContent.setMer_custom_ip("117.187.226.178");
//        bizContent.setMer_var("MER_VAR_DATA");
//        bizContent.setMer_url("https://blog.csdn.net/zsl471260400/article/details/80236569");
//        bizContent.setReturn_url("https://www.baidu.com/");
//        // bizContent.setAuto_refer_sec("xxx");
//        bizContent.setVerify_join_flag("0");
//        bizContent.setNotify_type("HS");
//        bizContent.setResult_type("0");
//        //   bizContent.setMer_custom_id("xxx");
//        //bizContent.setMer_custom_phone("xxx");
//        //  bizContent.setMer_order_remark("xxx");
//        //bizContent.setOrder_flag_ztb("xxx");
//        bizContent.setE_isMerFlag("0");
//        bizContent.setE_fixedACFlag("0");
//        //  bizContent.setO2o_mer_id("xxx");
//        bizContent.setCredit_type("2");
//        bizContent.setElife_mer_id("24020092169");
//        bizContent.setPay_expire("600");//二维码有效期。
//        bizContent.setPage_linkage_flag("1");
//        //  bizContent.setE_name("xxx");
//        //   bizContent.setE_TelNum("xxx");
//        //    bizContent.setE_CredType("xxx");
//        //   bizContent.setE_CredNum("xxx");
//        // bizContent.setE_CardNo("xxx");
//        //  bizContent.setGoods_address("xxx");
//        //   bizContent.setGoods_type("xxx");
//        //   bizContent.setRemark1("xxx");
//        //    bizContent.setOrder_interval("xxx");
//        try {
//            boolean testFlag = true;
//            String res = client.buildPostForm(request);
//            System.out.println("响应结果" + res);
//            LogUtils.writeLog("\r\n订单时间：" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\r\n订单号：" + outTradeNo + ",\r\n支付金额：" + amount + "元\r\n", LOG_ROOT);
//            response.setContentType("text/html;charset=UTF-8");
//            response.getWriter().write(res);
//            response.getWriter().flush();
//            response.getWriter().close();
//
//        } catch (IcbcApiException | IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 支付一分钱，自己编写的生成签名方法
//     *
//     * @param response
//     * @throws Exception
//     */
//    @GetMapping("testPay2")
//    public void testPay2(HttpServletResponse response) throws Exception {
//
//        String apiUrl = "/ui/cardbusiness/epaypc/consumption/V1";
//        String outTradeNo = "TS" + System.currentTimeMillis();
//        Long timestamp = System.currentTimeMillis();
//        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String expireTime = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
//        df.setTimeZone(TimeZone.getTimeZone("GMT+8"));
//        double amount = 0.01;
//        int fen = (int) (amount * 100);
//        //构建biz_content
//        Map<String, String> bizMap = new LinkedHashMap<>();
//        bizMap.put("amount", fen + "");//订单金额，单位分
//        bizMap.put("credit_type", "2");//默认“2”。有效取值：0-仅借记卡，1-仅信用卡，2-All
//        bizMap.put("cur_type", "001"); //交易币种，目前工行只支持使用人民币（001）支付
//        bizMap.put("e_fixedACFlag", "0"); //指定支付卡标志，仅icbc_flag送1时使用。0-否，1-是，不送或上送其他值按0-否处理，如上送1，则快捷支付及工行卡网银支付方式下，限定仅可使用指定卡完成交易。其他支付方式不作限制。
//        bizMap.put("e_isMerFlag", "0"); //工银e支付注册标志，标识客户在支付该笔订单时，是否使用订单指定的下述信息注册工银e支付。0-否，1-是
//        bizMap.put("elife_mer_id", IcbcSign.ELIFE_MER_ID);
//        bizMap.put("expire_time", expireTime);//订单有效日期，对订单的有效日期进行限定，输入类似”20110802152230”的时间串代表8月2日15:22:30之前支付订单有效。
//        // bizMap.put("goods_id", "");//商品编号
//        bizMap.put("goods_name", "账单缴费");//商品名称
//        bizMap.put("icbc_appid", IcbcSign.APP_ID);//商品名称
//        bizMap.put("icbc_flag", "1");//埋名或非埋名标志，字典：1-埋名，2-非埋名，默认非埋名
//        bizMap.put("installment_times", "1");//分期付款期数，1、3、6、9、12、18、24；1代表全额付款，必须为以上述值，否则订单校验不通过
//        bizMap.put("language", "zh_CN");//语言版本，默认为中文版，目前只支持中文版 取值：“zh_CN”
//        bizMap.put("mer_acct", IcbcSign.MER_ACCT);//收款账号
//        bizMap.put("mer_custom_ip", "117.187.226.178");//客户端ip
//        bizMap.put("mer_hint", "账单缴费");//商城提示
//        bizMap.put("mer_id", IcbcSign.MER_ID);//商城提示
//        bizMap.put("mer_prtcl_no", IcbcSign.MER_PRTCL_NO);//收单协议编号
//        bizMap.put("mer_url", IcbcSign.MER_PRTCL_NO);//通知商户URL，必须合法的URL，交易结束，银行使用HTTP协议POST方式向此地址发送通知信息；目前只支持80端口
//        bizMap.put("mer_url", "http://139.159.190.0:8080/sail-web/icbcPay/callbackTest");//通知商户URL，必须合法的URL，交易结束，银行使用HTTP协议POST方式向此地址发送通知信息；目前只支持80端口
//        bizMap.put("mer_var", "MER_VAR_DATA");//返回商户变量, 工行给商户发送商户通知时会原样返回，可参考响应报文中attach字段
//        bizMap.put("merchant_info", "RENT");//实际末端商户信息，如该字段上送，在支付订单页展现实际末端商户信息，且在支付成功后账务明细中体现
//        bizMap.put("notify_type", "HS");//通知类型。在交易转账处理完成后把交易结果通知商户的处理模式。取值“HS”：在交易完成后实时将通知信息以HTTP协议POST方式，主动发送给商户，发送地址为商户端随订单数据提交的接收工行支付结果的URL即表单中的mer_url字段；
//        bizMap.put("order_date", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));//交易日期时间，格式为：yyyyMMddHHmmss，要求在银行系统当前时间的前1小时和后12小时范围内，否则判定交易时间非法
//        bizMap.put("out_trade_no", outTradeNo);//商户订单号
//        bizMap.put("page_linkage_flag", "1");//页面联动标志，仅icbc_flag送1时使用。数据字典：0-否，1-是，非1按0-否处理。如上送1-是，则客户通过app扫描PC页面二维码支付时，PC页面可根据app端支付结果联动展现支付结果页面。
//        bizMap.put("pay_expire", "600");//二维码有效期。如需支持线下支付必输。单位：秒，必须小于24小时
//        bizMap.put("result_type", "0");// 结果发送类型。取值“0”：无论支付成功或者失败，银行都向商户发送交易通知信息；取值“1”，银行只向商户发送交易成功的通知信息。只有通知方式为HS时此值有效，如果使用AG方式，可不上送此项，但签名数据中必须包含此项，取值可为空。
//        bizMap.put("return_url", "https://www.baidu.com/");// 支付成功回显页面，支付成功后，跳转至该页面显示
//        bizMap.put("verify_join_flag", "0");// 联名校验标志。取值“1”：客户支付时，网银判断该客户是否与商户联名，是则按上送金额扣帐，否则展现未联名错误；我行联名商户可送“1”；取值“0”：不检验客户是否与商户联名，按上送金额扣帐。非联名商户请送“0”；
//
//        String bizJson = JSON.toJSONString(bizMap);
//
//        IcbcHashMap map = new IcbcHashMap();
//        map.put("biz_content", bizJson);
//        map.put("app_id", IcbcSign.APP_ID);
//        map.put("msg_id", UUID.randomUUID().toString().replace("-", ""));
//        map.put("format", "json");
//        map.put("sign_type", "RSA2");
//        map.put("format", "json");
//        map.put("charset", "UTF-8");
//        //  map.put("timestamp", df.format(new Date()));
//        map.put("timestamp", df.format(new Date()));
//        String orderedSignStr = IcbcSign.buildOrderedSignStr(apiUrl, map);
//
//        String sign = IcbcSign.sign(orderedSignStr);
//        map.put("sign", sign);
//
//        IcbcHashMap urlQueryParams = IcbcSign.buildUrlQueryParams(map);
//        String url = IcbcSign.buildGetUrl(IcbcSign.API_HOST + apiUrl, urlQueryParams, "UTF-8");
//        String formHtml = IcbcSign.buildForm(url, IcbcSign.buildBodyParams(map));
//        System.out.println("响应结果：" + formHtml);
//        LogUtils.writeLog("\r\n订单时间：" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\r\n订单号：" + outTradeNo + ",\r\n支付金额：" + amount + "元\r\n", LOG_ROOT);
//        LogUtils.writeLog(orderedSignStr + "\r\n", LOG_ROOT);
//        response.setContentType("text/html;charset=UTF-8");
//        response.getWriter().write(formHtml);
//        LogUtils.writeLog(formHtml, LOG_ROOT);
//        response.getWriter().flush();
//        response.getWriter().close();
//
//    }
//
//    /**
//     * 测试支付回调
//     */
//    public void testCallback() throws IcbcApiException {
//        ////回调数据
////        {
////            "charset":"UTF-8",
////                "biz_content":"{\"attach\":\"mer_var:data\",\"bank_disc_amt\":\"0\",\"card_flag\":\"\",\"card_no\":\"\",\"coupon_amt\":\"0\",\"cust_id\":\"\",\"decr_flag\":\"\",\"ecoupon_amt\":\"0\",\"mer_disc_amt\":\"0\",\"mer_id\":\"240207011184\",\"msg_id\":\"050202150210818161440141709\",\"open_id\":\"ow8NuxGOSI43OB_rAqIgsgEhD4vI\",\"order_id\":\"240207011184000712007280005001\",\"out_trade_no\":\"TS1595923932383\",\"pay_time\":\"20200728161440\",\"pay_type\":\"9\",\"payment_amt\":\"1\",\"point_amt\":\"0\",\"return_code\":\"0\",\"return_msg\":\"交易成功\",\"third_trade_no\":\"4200000572202007282592711329\",\"total_amt\":\"1\",\"total_disc_amt\":\"0\"}",
////                "format":"json",
////                "sign":"id+UgfaNolisTdsalRkPv0TIKW2SJuMW+oz+D+e5lzZXydhSmSJDz40dLRp9ifIFDB10Vo1Ck+Dc+obiYMJE8wmSpp4GSSqAm/hqMEhjCW47iJw+SoUElnMtUMETLVAUJrI5NyV/3wweRMYWiC3redhiMylJHptTkbZSaTq0tlo=",
////                "from":"icbc-api",
////                "api":"/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1",
////                "app_id":"10000000000003160185",
////                "sign_type":"RSA",
////                "timestamp":"2020-07-28 16:14:41"
////        }
//        Map<String, String> params = new HashMap<String, String>();
//        params.put("from", "icbc-api");
//        params.put("api", "/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1");
//        params.put("app_id", "10000000000003160185");
//        params.put("charset", "UTF-8");
//        params.put("format", "json");
//        params.put("encrypt_type", "");
//        params.put("timestamp", "2020-07-28 16:14:41");
//        params.put("biz_content", "{\"attach\":\"mer_var:data\",\"bank_disc_amt\":\"0\",\"card_flag\":\"\",\"card_no\":\"\",\"coupon_amt\":\"0\",\"cust_id\":\"\",\"decr_flag\":\"\",\"ecoupon_amt\":\"0\",\"mer_disc_amt\":\"0\",\"mer_id\":\"240207011184\",\"msg_id\":\"050202150210818161440141709\",\"open_id\":\"ow8NuxGOSI43OB_rAqIgsgEhD4vI\",\"order_id\":\"240207011184000712007280005001\",\"out_trade_no\":\"TS1595923932383\",\"pay_time\":\"20200728161440\",\"pay_type\":\"9\",\"payment_amt\":\"1\",\"point_amt\":\"0\",\"return_code\":\"0\",\"return_msg\":\"交易成功\",\"third_trade_no\":\"4200000572202007282592711329\",\"total_amt\":\"1\",\"total_disc_amt\":\"0\"}");
//        params.put("sign_type", "RSA");//目前上行网关签名暂时仅支持RSA
//        //notify_url=http://122.20.29.133:9081/notifyUrlServlet
//        //http://139.159.190.0:8080/sail-web/icbcPay/callbackTest
//        String path = "/sail-web/icbcPay/callbackTest";
//        String signStr = IcbcSign.buildOrderedSignStr(path, params);
//        String results = null;
//        String responseBizContent = null;
//        boolean flag = IcbcSignature.verify(signStr, "RSA", APIGW_PUBLIC_KEY, "UTF-8", "id+UgfaNolisTdsalRkPv0TIKW2SJuMW+oz+D+e5lzZXydhSmSJDz40dLRp9ifIFDB10Vo1Ck+Dc+obiYMJE8wmSpp4GSSqAm/hqMEhjCW47iJw+SoUElnMtUMETLVAUJrI5NyV/3wweRMYWiC3redhiMylJHptTkbZSaTq0tlo=");
//        if (!flag) {
//            responseBizContent = "{\"return_code\":-12345,\"return_msg\":\"icbc sign not pass.\"}";
//        } else {
//        }
//    }
//
//    /**
//     *     聚合支付，工行签名
//     */
//    @GetMapping("wxPay")
//    public void WxPay(HttpServletResponse response) {
//        String outTradeNo = "TS" + System.currentTimeMillis();
//        //需传入appid，私钥，字符集
//        UiIcbcClient client = new UiIcbcClient(IcbcSign.APP_ID, IcbcConstants.SIGN_TYPE_RSA2, IcbcSign.QRCODE_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8);
//        CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1 request = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1();
//        //根据测试环境和生产环境替换相应ip和端口
//        request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1");
//        CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz();
//        request.setBizContent(bizContent);
//        //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
//        bizContent.setAttach("");
//        bizContent.setBody("小卖铺");
//        bizContent.setExpireTime("");
//        bizContent.setIcbc_appid(IcbcSign.APP_ID);
//        bizContent.setMer_id(IcbcSign.MER_ID);
//        bizContent.setMer_prtcl_no(IcbcSign.MER_PRTCL_NO);
//        bizContent.setMer_acct(IcbcSign.MER_ACCT);
//        bizContent.setNotify_type("HS");
//        bizContent.setNotify_url("http://122.131.29.82");
//      //  bizContent.setOpenId("468455");
//        bizContent.setOrder_amt("1");
//        bizContent.setOut_trade_no(outTradeNo);
//        bizContent.setPay_limit("");
//        bizContent.setResult_type("");
//        bizContent.setResult_type("");
//        bizContent.setReturn_url("");
//        bizContent.setSaledepname("小卖铺‐测试");
//        bizContent.setSubject("");
//        bizContent.setShop_appid("");
//        bizContent.setOrder_apd_inf("");
//        try {
//            boolean testFlag = true;
//            String form = client.buildPostForm(request);
//            LogUtils.writeLog("\r\n订单时间：" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\r\n订单号：" + outTradeNo + ",\r\n支付金额：" + 1 + "分\r\n", LOG_ROOT);
//            response.setContentType("text/html;charset=UTF-8");
//            response.getWriter().write(form);
//            response.getWriter().flush();
//            response.getWriter().close();
//            // assertEquals(true, testFlag);
//        } catch (IcbcApiException | IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 微信支付，本地签名
//     */
//    @GetMapping("wxPay2")
//    public  void wxPay2(HttpServletResponse response) throws Exception {
//        String apiUrl = "/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1";
//        String outTradeNo = "TS" + System.currentTimeMillis();
//        Long timestamp = System.currentTimeMillis();
//        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String expireTime = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
//        df.setTimeZone(TimeZone.getTimeZone("GMT+8"));
//        double amount = 0.01;
//        int fen = (int) (amount * 100);
//        //构建biz_content
//        Map<String, String> bizMap = new LinkedHashMap<>();
//        bizMap.put("amount", fen + "");//订单金额，单位分
//        bizMap.put("mer_id",IcbcSign.MER_ID);
//        bizMap.put("out_trade_no",outTradeNo);//商户订单号，只能是数字、大 小写字母，且在同一个商户号 下唯一
//        bizMap.put("mer_prtcl_no",IcbcSign.MER_PRTCL_NO);//收单产品协议编号
//        bizMap.put("order_amt",fen+"");//订单金额，单位为分
//        bizMap.put("notify_url",fen+"");//异步通知商户URL，端口必须 为443或80
//        bizMap.put("icbc_appid",IcbcSign.APP_ID);//工行API平台的APPID
//        bizMap.put("openId",IcbcSign.APP_ID);//第三方用户标识，微信支付上 送用户在商户APPID（指商户 在微信开放平台的APPID）下 的唯一标识；支付宝支付上送 用户的唯一标识。若该字段不 上送，取用户在工行 APPID（指工行在微信开放平 台的APPID）下的唯一标识
//        bizMap.put("saledepname","贵阳市人才安居服务有限公司");//门店名称，用于显示在买单页 上
//        bizMap.put("body","账单缴费");//微信商品描述，传入微信公众号名称-实际商品名称。微信支付时必输，非微信支付的送空 字符串
//        bizMap.put("subject","");//支付宝的订单标题，支付宝支 付时必输，非支付宝支付的送 空字符串
//        bizMap.put("notify_type","HS");//通知类型，表示在交易处理完 成后把交易结果通知商户的处 理模式。取值“HS”：在交易完 成后将通知信息，主动发送给 商户，发送地址为notify_url指 定地址； 取值“AG”：在交易完 成后不通知商户。不送或送 空，默认为"HS"
//        bizMap.put("result_type","0");//结果发送类型，通知方式为HS 时有效。取值“0”：无论支付成 功或者失败，银行都向商户发 送交易通知信息；取值“1”，银 行只向商户发送交易成功的通 知信息。不送或送空，默认 为"0"
//        bizMap.put("mer_acct",IcbcSign.MER_ACCT);//商户账号，商户入账账号，只 能交易时指定。（商户付给银 行手续费的账户，可以在开户 的时候指定，也可以用交易指 定方式；用交易指定方式则使 用此商户账号）。该字段暂不 支持上送
//        bizMap.put("expireTime","600");//订单失效时间，单位为秒，建 议大于60秒
//        bizMap.put("attach","ATTACH_DATA");//附加数据，在查询API和支付通 知中原样返回，该字段主要用 于商户携带订单的自定义数据
//        bizMap.put("return_url","https://www.baidu.com");//支付成功回显页面，支付成功 后，跳转至该页面显示。默认 跳转到工行的广告页
//       // bizMap.put("pay_limit","");//支付方式限定，上 送”no_credit“表示不支持信用 卡支付；上送“no_balance”表 示仅支持银行卡支付；不上送 或上送空表示无限制。暂只支 持微信公众号
//       // bizMap.put("pay_limit","");//支付方式限定，上 送”no_credit“表示不支持信用 卡支付；上送“no_balance”表 示仅支持银行卡支付；不上送 或上送空表示无限制。暂只支 持微信公众号
//        //bizMap.put("shop_appid","");//商户在微信开放平台的 APPID，微信支付且openId有 值时必送
//        //bizMap.put("order_apd_inf","");//订单附加信息
//
//        String bizJson = JSON.toJSONString(bizMap);
//
//        IcbcHashMap map = new IcbcHashMap();
//        map.put("biz_content", bizJson);
//        map.put("app_id", IcbcSign.APP_ID);
//        map.put("msg_id", UUID.randomUUID().toString().replace("-", "").substring(0,28));
//        map.put("format", "json");
//        map.put("sign_type", "RSA2");
//        map.put("format", "json");
//        map.put("charset", "UTF-8");
//        //  map.put("timestamp", df.format(new Date()));
//        map.put("timestamp", df.format(new Date()));
//        String orderedSignStr = IcbcSign.buildOrderedSignStr(apiUrl, map);
//        String sign = IcbcSign.sign(orderedSignStr);
//        map.put("sign", sign);
//
//        IcbcHashMap urlQueryParams = IcbcSign.buildUrlQueryParams(map);
//        String url = IcbcSign.buildGetUrl(IcbcSign.API_HOST + apiUrl, urlQueryParams, "UTF-8");
//        String formHtml = IcbcSign.buildForm(url, IcbcSign.buildBodyParams(map));
//        System.out.println("响应结果：" + formHtml);
//        LogUtils.writeLog("\r\n微信支付：订单时间：" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\r\n订单号：" + outTradeNo + ",\r\n支付金额：" + amount + "元\r\n", LOG_ROOT);
//        LogUtils.writeLog(orderedSignStr + "\r\n", LOG_ROOT);
//        response.setContentType("text/html;charset=UTF-8");
//        response.getWriter().write(formHtml);
//        LogUtils.writeLog(formHtml, LOG_ROOT);
//        response.getWriter().flush();
//        response.getWriter().close();
//    }
//
//
//    @GetMapping("testSign")
//    public void testSign() {
//
//    }
//}
